package collection;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;


/**
 * JDK1.8之后，集合提供了流式操作
 * 集合提供了一个方法 ：stream()
 * 步骤：将集合转为流  --> 中间环节  -->  终端环节
 */
public class StreamApiDemo1 {
    public static void main(String[] args) {
        //创建一个随机数对象
        Random rand = new Random();
        //创建一个集合，泛型为Integer
        List<Integer> list = new ArrayList<Integer>();
        //使用for循环完成集合元素的填充，向集合中填充10个随机数
        for (int i = 0; i < 10; i++) {
            list.add(rand.nextInt(100));    //向集合填充0-99的随机数
        }
        System.out.println(list);

        //希望每个元素都可以扩大3倍，可以用stream流
        List<Integer> list2 = list.stream()    //将集合转为流
                                .map(a -> a * 3)    //中间环节让集合元素扩大3倍
                                .collect(Collectors.toList());  //终端环节，将流转为集合
        System.out.println(list2);

        //仅保留集合中所有的偶数
        List<Integer>list3=list.stream()                    //将集合转为流
                            .filter(e->e%2==0)              //添加中间环节，取偶数
                            .collect(Collectors.toList());  //终端环节，将流转为集合
        System.out.println(list3);

        //降序
        List<Integer>list4=list.stream()                 //将集合转为流
                            .sorted((e1,e2)->e2-e1)   //中间环节，定义降序规则
                            .collect(Collectors.toList());    //终端环节，将流转为集合
        System.out.println(list4);
        //对集合每个元素扩大3倍并获取其中所有的偶数并且降序排列
        List<Integer>list5=list.stream()                     //将集合转为流
                            .map(e->e*3)                     //将元素扩大三倍
                            .filter(e->e%2==0)               //过滤偶数
                            .sorted((e1,e2)->e2-e1)          //自定义降序排序
                            .collect(Collectors.toList());   //将流转换为集合
        System.out.println(list5);
    }
}
